1 using System;
2 using UnityEngine;
3 using UnityEngine.Rendering;
4
5 namespace ProceduralToolkit
6 {
7 public static class GLE
8 {
9 public static readonly Material wireMaterial;
10
11 private static readonly Action<Vector3, Vector3> drawLine;
12
13 static GLE()
14 {
15 var shader = Shader.Find("Hidden/Internal-Colored");
16 wireMaterial = new Material(shader) {hideFlags = HideFlags.HideAndDontSave};
17 wireMaterial.SetInt("_SrcBlend", (int) BlendMode.SrcAlpha);
18 wireMaterial.SetInt("_DstBlend", (int) BlendMode.OneMinusSrcAlpha);
19 wireMaterial.SetInt("_Cull", (int) CullMode.Off);
20 wireMaterial.SetInt("_ZWrite", 0);
21
22 drawLine = DrawLine;
23 }
24
25 public static void DrawLine(Vector3 from, Vector3 to)
26 {
27 GL.Vertex(from);
28 GL.Vertex(to);
29 }
30
31 public static void DrawRay(Ray ray)
32 {
33 Draw.WireRay(drawLine, ray);
34 }
35
36 public static void DrawWireQuadXY(Vector3 position, Quaternion rotation, Vector2 scale)
37 {
38 Draw.WireQuadXY(drawLine, position, rotation, scale);
39 }
40
41 public static void DrawWireQuadXZ(Vector3 position, Quaternion rotation, Vector2 scale)
42 {
43 Draw.WireQuadXZ(drawLine, position, rotation, scale);
44 }
45
46 public static void DrawWireQuadYZ(Vector3 position, Quaternion rotation, Vector2 scale)
47 {
48 Draw.WireQuadYZ(drawLine, position, rotation, scale);
49 }
50
51 public static void DrawWireCube(Vector3 position, Quaternion rotation, Vector3 scale)
52 {
53 Draw.WireCube(drawLine, position, rotation, scale);
54 }
55
56 #region DrawWireCircle
57
58 public static void DrawWireCircleXY(Vector3 position, float radius)
59 {
60 Draw.WireCircleXY(drawLine, position, radius);
61 }
62
63 public static void DrawWireCircleXY(Vector3 position, Quaternion rotation, float radius)
64 {
65 Draw.WireCircleXY(drawLine, position, rotation, radius);
66 }
67
68 public static void DrawWireCircleXZ(Vector3 position, float radius)
69 {
70 Draw.WireCircleXZ(drawLine, position, radius);
71 }
72
73 public static void DrawWireCircleXZ(Vector3 position, Quaternion rotation, float radius)
74 {
75 Draw.WireCircleXZ(drawLine, position, rotation, radius);
76 }
77
78 public static void DrawWireCircleYZ(Vector3 position, float radius)
79 {
80 Draw.WireCircleYZ(drawLine, position, radius);
81 }
82
83 public static void DrawWireCircleYZ(Vector3 position, Quaternion rotation, float radius)
84 {
85 Draw.WireCircleYZ(drawLine, position, rotation, radius);
86 }
87
88 #endregion DrawWireCircle
89
90 #region DrawWireArc
91
92 public static void DrawWireArcXY(Vector3 position, float radius, float fromAngle, float toAngle)
93 {
94 Draw.WireArcXY(drawLine, position, radius, fromAngle, toAngle);
95 }
96
97 public static void DrawWireArcXY(Vector3 position, Quaternion rotation, float radius, float fromAngle,
98 float toAngle)
99 {
100 Draw.WireArcXY(drawLine, position, rotation, radius, fromAngle, toAngle);
101 }
102
103 public static void DrawWireArcXZ(Vector3 position, float radius, float fromAngle, float toAngle)
104 {
105 Draw.WireArcXZ(drawLine, position, radius, fromAngle, toAngle);
106 }
107
108 public static void DrawWireArcXZ(Vector3 position, Quaternion rotation, float radius, float fromAngle,
109 float toAngle)
110 {
111 Draw.WireArcXZ(drawLine, position, rotation, radius, fromAngle, toAngle);
112 }
113
114 public static void DrawWireArcYZ(Vector3 position, float radius, float fromAngle, float toAngle)
115 {
116 Draw.WireArcYZ(drawLine, position, radius, fromAngle, toAngle);
117 }
118
119 public static void DrawWireArcYZ(Vector3 position, Quaternion rotation, float radius, float fromAngle,
120 float toAngle)
121 {
122 Draw.WireArcYZ(drawLine, position, rotation, radius, fromAngle, toAngle);
123 }
124
125 #endregion DrawWireArc
126
127 public static void DrawWireSphere(Vector3 position, Quaternion rotation, float radius)
128 {
129 Draw.WireSphere(drawLine, position, rotation, radius);
130 }
131
132 public static void DrawWireHemisphere(Vector3 position, Quaternion rotation, float radius)
133 {
134 Draw.WireHemisphere(drawLine, position, rotation, radius);
135 }
136
137 public static void DrawWireCone(Vector3 position, Quaternion rotation, float apexRadius, float angle,
138 float length)
139 {
140 Draw.WireCone(drawLine, position, rotation, apexRadius, angle, length);
141 }
142 }
143 }